// 统计二叉树各类结点个数.png

#include <stdio.h>
#include <stdlib.h>

typedef char TElemType; // 本例子假设二叉树每个结点的值为char
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *LChild, *RChild;
} BiTNode, *BiTree;

int n2 = 0, n1 = 0, n0 = 0; // 分别记录度为2,1,0的结点个数
BiTree CreateBiTree();      // 创建二叉树
void count(BiTree root);    // 统计各类结点个数

int main()
{
    BiTree bt = NULL;
    bt = CreateBiTree(); /*建立一棵二叉树bt*/

    count(bt);
    printf("n2=%d n1=%d n0=%d", n2, n1, n0);
    return 0;
}

// 输入扩展先序建立二叉树
BiTree CreateBiTree()
{
    char ch;
    BiTNode *bt;
    ch = getchar();
    if (ch == '#')
        return NULL; /*输入#表示空树*/
    else
    {
        bt = (BiTree)malloc(sizeof(BiTNode)); /*申请结点   */
        bt->data = ch;                        /*生成根结点  */
        bt->LChild = CreateBiTree();          /*构造左子树  */
        bt->RChild = CreateBiTree();          /*构造右子树  */
        return bt;
    }
}
/* 请在这里填写答案 */
void count(BiTree root)
{
    if (root == NULL)
    {
        return;
    }
    if (root->LChild != NULL && root->RChild != NULL)
    {
        n2++;
        count(root->LChild);
        count(root->RChild);
    }
    if (root->LChild == NULL && root->RChild != NULL)
    {
        n1++;
        count(root->RChild);
    }
    if (root->LChild != NULL && root->RChild == NULL)
    {
        n1++;
        count(root->LChild);
    }
    if (root->LChild == NULL && root->RChild == NULL)
    {
        n0++;
    }
}